(require (planet schematics/schemeunit:3))

(define (p) (p))

(define (test x y)
  (if (= x 0)
      0
      y))


;Application order

(test 0 (p))

;é expandido para

(test 0 (p))

;é expandido para

(test 0 (p))

;infinitamente...


;Normal order

(test 0 (p))

;é expandido para

(if (= 0 0)
    0
    (p))

;é expandido para

(if #t
    0
    (p))

;é expandido para

0

;A "preguiça" do normal order permite que a função p (infinitamente recursiva)
;nunca seja avaliada devido à característica de "short-circuit" do if.

;Por sinal, rodar este arquivo fará o interpretador travar :)
